/*
 * @lc app=leetcode.cn id=88 lang=golang
 *
 * [88] 合并两个有序数组
 */

// 2-2. 拷贝 排序
// @lc code=start
func merge(nums1 []int, m int, nums2 []int, n int) {
	copy(nums1[m:], nums2)
	sort.Ints(nums1)
}

// @lc code=end

// 2-1. 拷贝 排序
// @lc code=start
func merge(nums1 []int, m int, nums2 []int, _ int) {
	for i := 0; i < n; i++ {
		nums1[m+i] = nums2[i]
	}
	sort.Ints(nums1)
}

// @lc code=end

// 1. )O_O(
// @lc code=start
func merge(nums1 []int, m int, nums2 []int, n int) {
	temp := make([]int, m+n)
	i, x, y := 0, 0, 0
	for x < m && y < n {
		if nums1[x] < nums2[y] {
			temp[i] = nums1[x]
			i++
			x++
		} else {
			temp[i] = nums2[y]
			i++
			y++
		}
	}
	if x < m {
		for ; x < m; x++ {
			temp[i] = nums1[x]
			i++
		}
		// temp = append(temp, nums1[x:]...) //1 2 2 3 0 0 5 6
	}

	if y < n {
		for ; y < n; y++ {
			temp[i] = nums2[y]
			i++
		}
		// temp = append(temp, nums2[y:]...)
	}

	copy(nums1, temp)
}

// @lc code=end

